function Cat(name,color){
    this.name=name;
    this.color=color;
    
    //浪费内存，应该共享
    //需要指向一个新的，构造函数之外的内存空间
    // this.type='mmm';//不会改变的属性
    // this.eat=function(){
    //     console.log('eee');
    // }
}
//交给prototype
//1.省内存
//2.所有实例共享prototype对象上的属性和方法 
// 3.实例他是如何共享prototyped对象的呢？
// 4.this->constructor+prototype上的
// 如何区分 对象本身属性(constructor)和prototype对象上的属性？
Cat.prototype={
    type:'mmm',
    eat:function(){
        console.log('eee');
    }
}

let cat1 =new Cat('tom','black');//内存角度看，分配了新的内存空间
let cat2 =new Cat('cafei','black');

console.log(cat1.hasOwnProperty('name'),cat2.hasOwnProperty('type'));
//首先到ownProperties 去查找，有则返回，否则继续到prototype对象上去找
// js通过什么语法来实现的呢？__protp__只要在原型对象上，也可以直接调用

//Object 的   原型链
console.log(cat1.toSting());
console.log(cat2.__ptoto__.__proto__)//__proto__支持链式查找